home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 176-200 / disk_195 / microemacs / src.zoo / ansi.c < prev    next >
C/C++ Source or Header  |  1989-03-23  |  5KB  |  272 lines

  1. /*
  2.  * The routines in this file provide support for ANSI style terminals
  3.  * over a serial line. The serial I/O services are provided by routines in
  4.  * "termio.c". It compiles into nothing if not an ANSI device.
  5.  */
  6.  
  7. #define    termdef    1            /* don't define "term" external */
  8.  
  9. #include        <stdio.h>
  10. #include    "estruct.h"
  11. #include    "etype.h"
  12. #include    "etype.h"
  13. #include        "edef.h"
  14. #include    "elang.h"
  15.  
  16. #if     ANSI
  17.  
  18. #define NROW    25                      /* Screen size.                 */
  19. #define NCOL    80                      /* Edit if you want to.         */
  20. #define    NPAUSE    100            /* # times thru update to pause */
  21. #define    MARGIN    8            /* size of minimim margin and    */
  22. #define    SCRSIZ    64            /* scroll size for extended lines */
  23. #define BEL     0x07                    /* BEL character.               */
  24. #define ESC     0x1B                    /* ESC character.               */
  25.  
  26. /* Forward references.          */
  27. extern int PASCAL NEAR ansimove();
  28. extern int PASCAL NEAR ansieeol();
  29. extern int PASCAL NEAR ansieeop();
  30. extern int PASCAL NEAR ansibeep();
  31. extern int PASCAL NEAR ansiopen();
  32. extern int PASCAL NEAR ansirev();
  33. extern int PASCAL NEAR ansiclose();
  34. extern int PASCAL NEAR ansikopen();
  35. extern int PASCAL NEAR ansikclose();
  36. extern int PASCAL NEAR ansicres();
  37. extern int PASCAL NEAR ansiparm();
  38.  
  39. #if    COLOR
  40. extern int PASCAL NEAR ansifcol();
  41. extern int PASCAL NEAR ansibcol();
  42.  
  43. static int cfcolor = -1;    /* current forground color */
  44. static int cbcolor = -1;    /* current background color */
  45.  
  46. #if    AMIGA
  47. /* apperently the AMIGA does not follow the ANSI standards as
  48.    regards to colors....maybe because of the default pallette
  49.    settings?
  50. */
  51.  
  52. /* color translation table */
  53.  
  54. int coltran[16] = {2, 3, 5, 7, 0, 4, 6, 1,
  55.      8, 12, 10, 14, 9, 13, 11, 15};
  56. #endif
  57. #endif
  58.  
  59. /*
  60.  * Standard terminal interface dispatch table. Most of the fields point into
  61.  * "termio" code.
  62.  */
  63. NOSHARE TERM term    = {
  64.     NROW-1,
  65.         NROW-1,
  66.         NCOL,
  67.         NCOL,
  68.     MARGIN,
  69.     SCRSIZ,
  70.     NPAUSE,
  71.         ansiopen,
  72.         ansiclose,
  73.     ansikopen,
  74.     ansikclose,
  75.         ttgetc,
  76.         ttputc,
  77.         ttflush,
  78.         ansimove,
  79.         ansieeol,
  80.         ansieeop,
  81.         ansibeep,
  82.     ansirev,
  83.     ansicres
  84. #if    COLOR
  85.     , ansifcol,
  86.     ansibcol
  87. #endif
  88. };
  89.  
  90. #if    COLOR
  91. PASCAL NEAR ansifcol(color)        /* set the current output color */
  92.  
  93. int color;    /* color to set */
  94.  
  95. {
  96.     if (color == cfcolor)
  97.         return;
  98.     ttputc(ESC);
  99.     ttputc('[');
  100. #if    AMIGA
  101.     ansiparm(coltran[color]+30);
  102. #else
  103.     ansiparm(color+30);
  104. #endif
  105.     ttputc('m');
  106.     cfcolor = color;
  107. }
  108.  
  109. PASCAL NEAR ansibcol(color)        /* set the current background color */
  110.  
  111. int color;    /* color to set */
  112.  
  113. {
  114.     if (color == cbcolor)
  115.         return;
  116.     ttputc(ESC);
  117.     ttputc('[');
  118. #if    AMIGA
  119.     ansiparm(coltran[color]+40);
  120. #else
  121.     ansiparm(color+40);
  122. #endif
  123.     ttputc('m');
  124.         cbcolor = color;
  125. }
  126. #endif
  127.  
  128. PASCAL NEAR ansimove(row, col)
  129. {
  130.         ttputc(ESC);
  131.         ttputc('[');
  132.         ansiparm(row+1);
  133.         ttputc(';');
  134.         ansiparm(col+1);
  135.         ttputc('H');
  136. }
  137.  
  138. PASCAL NEAR ansieeol()
  139. {
  140.         ttputc(ESC);
  141.         ttputc('[');
  142.         ttputc('K');
  143. }
  144.  
  145. PASCAL NEAR ansieeop()
  146. {
  147. #if    COLOR
  148.     ansifcol(gfcolor);
  149.     ansibcol(gbcolor);
  150. #endif
  151.         ttputc(ESC);
  152.         ttputc('[');
  153.         ttputc('J');
  154. }
  155.  
  156. PASCAL NEAR ansirev(state)        /* change reverse video state */
  157.  
  158. int state;    /* TRUE = reverse, FALSE = normal */
  159.  
  160. {
  161. #if    COLOR
  162.     int ftmp, btmp;        /* temporaries for colors */
  163. #endif
  164.  
  165.     ttputc(ESC);
  166.     ttputc('[');
  167.     ttputc(state ? '7': '0');
  168.     ttputc('m');
  169. #if    COLOR
  170.     if (state == FALSE) {
  171.         ftmp = cfcolor;
  172.         btmp = cbcolor;
  173.         cfcolor = -1;
  174.         cbcolor = -1;
  175.         ansifcol(ftmp);
  176.         ansibcol(btmp);
  177.     }
  178. #endif
  179. }
  180.  
  181. PASCAL NEAR ansicres()    /* change screen resolution */
  182.  
  183. {
  184.     return(TRUE);
  185. }
  186.  
  187. PASCAL NEAR spal(dummy)        /* change pallette settings */
  188.  
  189. {
  190.     /* none for now */
  191. }
  192.  
  193. PASCAL NEAR ansibeep()
  194. {
  195.         ttputc(BEL);
  196.         ttflush();
  197. }
  198.  
  199. PASCAL NEAR ansiparm(n)
  200. register int    n;
  201. {
  202.         register int q,r;
  203.  
  204.         q = n/10;
  205.         if (q != 0) {
  206.         r = q/10;
  207.         if (r != 0) {
  208.             ttputc((r%10)+'0');
  209.         }
  210.         ttputc((q%10) + '0');
  211.         }
  212.         ttputc((n%10) + '0');
  213. }
  214.  
  215. PASCAL NEAR ansiopen()
  216. {
  217. #if     V7 | USG | HPUX | BSD | SUN | XENIX
  218.         register char *cp;
  219.         char *getenv();
  220.  
  221.         if ((cp = getenv("TERM")) == NULL) {
  222.                 puts(TEXT4);
  223. /*                   "Shell variable TERM not defined!" */
  224.                 meexit(1);
  225.         }
  226.         if (strcmp(cp, "vt100") != 0) {
  227.                 puts(TEXT5);
  228. /*                   "Terminal type not 'vt100'!" */
  229.                 meexit(1);
  230.         }
  231. #endif
  232.     strcpy(sres, "NORMAL");
  233.     revexist = TRUE;
  234.         ttopen();
  235. }
  236.  
  237. PASCAL NEAR ansiclose()
  238.  
  239. {
  240. #if    COLOR
  241.     ansifcol(7);
  242.     ansibcol(0);
  243. #endif
  244.     ttclose();
  245. }
  246.  
  247. PASCAL NEAR ansikopen()    /* open the keyboard (a noop here) */
  248.  
  249. {
  250. }
  251.  
  252. PASCAL NEAR ansikclose()    /* close the keyboard (a noop here) */
  253.  
  254. {
  255. }
  256.  
  257. #if    FLABEL
  258. fnclabel(f, n)        /* label a function key */
  259.  
  260. int f,n;    /* default flag, numeric argument [unused] */
  261.  
  262. {
  263.     /* on machines with no function keys...don't bother */
  264.     return(TRUE);
  265. }
  266. #endif
  267. #else
  268. ansihello()
  269. {
  270. }
  271. #endif
  272.